//
//  std_vector.cpp
//  learnC++
//
//  Created by apple on 2018/5/30.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#include "std_vector.hpp"

using namespace std;

static void vecPrintfLength(std::vector<int> &vec){
    cout << vec.size() << endl;
}


//动态数组，可在运行时增删数组
void test_std_vector(){
    //std::vector 本身在栈上，元素在堆上（无需关心释放问题）
    std::vector<int> arr;
    
    std::vector<int> arr2 = {9,3,7,1};
    
    std::vector<int> arr3 {5,3,7,1,8,4};
    
    vecPrintfLength(arr2);
    
    //数组里面包含数组
    std::vector<int> arrs[]{arr2,arr3};
    
    vector<vector<int>> fff{arr2,arr3};
    
    arr2[2] = 2;
    
    arr2.at(2) = 3;
    
    cout << arr2.size() << endl;
    
//    在这种情况下，vector将自我调整大小以匹配提供的元素的数量。
    arr2 = {0,1,2,3};
    
    
    cout << arr2.size() << endl;
    
    //调整大小花费很大，应尽量减少调整
    arr2.resize(6);
    //当调整的较小就会丢弃超出的元素
    arr2.resize(2);
    
    cout << arr2.size() << endl;
    
    for(auto const &element : arr2){
        cout << element << endl;
    }
    
    //存储bool值 8个bool一个字节
    std::vector<bool> arr4{true,false,true,false};
    cout << arr4.size() << "\n";
    
    for(auto const element : arr4){
        cout << element <<endl;
    }
    
    //分配在堆上
    std::vector<int> *vec = new std::vector<int>{1,2,3};
    delete vec;
    
}
